package main

import (
	"fmt"
	"math/rand"
	"time"
)

// 数组是值类型，不是引用
func main() {
	var array1 [4]float64
	array1[0] = 3.0
	array1[1] = 5.0
	array1[2] = 7.0
	array1[3] = 10.0
	total := 0.0
	for i := 0; i < len(array1); i++ {
		total += array1[i]
	}
	fmt.Println(total / float64(len(array1)))

	// for range 遍历
	for index, value := range array1 {
		fmt.Printf("index=%v value=%v \n", index, value)
	}

	for _, v := range array1 {
		fmt.Printf("value=%v \n", v)
	}

	var array02 [2]float64
	fmt.Printf("array01=%v \n", array02)
	// 数组是值传递 通过指针达到引用传递
	array03 := [2]int{1, 2}
	test(array03)
	// 值不会改变
	fmt.Printf("array03[1]=%v \n", array03[1]) // 2
	// 使用指针
	test1(&array03)
	fmt.Printf("array03[1]=%v \n", array03[1]) // 4

	var mychar [26]byte
	for i := 0; i < 26; i++ {
		mychar[i] = 'A' + byte(i)
	}
	for i := 0; i < 26; i++ {
		fmt.Printf("%c ", mychar[i])
	}

	//数组随机[rand]和 反转
	// 每次给一个不同的种子，保证每次结果不一样
	rand.Seed(time.Now().UnixNano())
	var arr5 [5]int
	for i := 0; i < len(arr5); i++ {
		arr5[i] = rand.Intn(100)
	}
	fmt.Println(arr5)
}

// 长度是数组的一部分，长度要一致
func test(arr [2]int) {
	arr[1] = 4
}

func test1(arr *[2]int) {
	(*arr)[1] = 4
}
